CAN Bus protocol
This section defines the CEX communication protocol.
This is the configuration of the messages that must be performed in Veronte Autopilot 1x to communicate with CEX.
Note
No configuration of these messages is required in CEX, as CEX is already internally configured to "understand" messages configured in this way.
Warning
For these messages sent from the 1x to be processed correctly, they must be received by the 'Consumer' Application processor.
CEX Communication Protocol via CAN Bus is defined as follows:
-
cmd (8 bits - 1 byte): First byte refers to the Message Type.
Messages Type are defined as follows:
| Type | Value | Description |
|---|---|---|
| t_arbitration | 0 | Arbitration message |
| t_version | 1 | Version request / response |
| t_pwm_0_3_set | 2 | PWMs 0 to 3 |
| t_pwm_4_7_set | 3 | PWMs 4 to 7 |
| 4 | Reserved | |
| t_esc_tm | 5 | Scorpion Tribunus ESC telemetry data |
| t_esc_tm2 | 6 | Jeti ESC telemetry data |
| t_bec_tm1 | 7 | Jeti BEC telemetry data 1 |
| t_bec_tm2 | 8 | Jeti BEC telemetry data 2 |
| t_temp_tm | 9 | Jeti Temperature sensor telemetry data |
| t_mcu_cmd | 10 | Lift MCU battery command |
| t_pwm_8_11_set | 11 | PWMs 8 to 11 |
| t_pwm_12_15_set | 12 | PWMs 12 to 15 |
| t_pwm_16_19_set | 13 | PWMs 16 to 19 |
| 14 | Reserved | |
| 15 | Reserved | |
| t_cmd_maint | 16 | Command to go to Maintenance Mode |
| t_stick_sel | 17 | Command for Stick selection |
| t_mcu_tm1 | 18 | Lift MCU telemetry data 1 |
| t_mcu_tm2 | 19 | Lift MCU telemetry data 2 |
Note
All these Message Type are defined as a "Matcher" in the CAN custom messages configuration. For example, for PWMs 0-3, the Message Type will be configured as follows
- Value: 2. This is because it is the value for the message for PWMs 0 to 3 (it is indifferent to the PWM number).
- Bits: 8. This is because the Message Type is an 8-bit message.
- data (up to 56 bits - 8 bytes): The following bytes refer to the Message data.
Next sections decribe each one of the possible messages with an example. The following examples include complete messages, so each beginning corresponds to Message Type.
CEX Status
CEX status message is composed as follows:
| Type / Command | Value | Size | Description |
|---|---|---|---|
| cmd (t_version) | 1 | 1 | Version request / response |
| data | - | 1 | Version - Major |
| data | - | 1 | Version - Minor |
| data | - | 1 | Version - Revision |
| data (sysaddr) | - | 1 | Serial number - address 0 |
| data (sysaddr) | - | 1 | Serial number - address 1 |
| data | - | 1 bit | System Error bit (ID 7) |
| data (CEX status) | - | 1 bit | System power up bit error bit (ID 12) |
| data (CEX status) | - | 1 bit | PDI error bit (ID 9) |
| data (CEX status) | - | 1 bit | Memory Allocationbit (ID 8) |
| data (CEX status) | - | 1 bit | File system error bit (ID 6) |
| data (CEX status) | - | 1 bit | CAN A ERROR bit (ID 73) |
| data (CEX status) | - | 1 bit | CAN B ERROR bit (ID 74) |
| data (CEX status) | - | 1 bit | false |
| data (CEX status) | - | 1 bit | Arbiter enabled |
| data (CEX status) | - | 1 bit | Arbiter status |
Arbitration
CEX Arbitration Status message is composed as follows:
- Message 1: Sent when "Send status" is enabled
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_arbitration) | 0 | 1 | Arbitration message |
| Flag | 255 ([0xFF]) | 1 | Status Flag |
| CAP | - | 7 bits | Active Autopilot (Current) |
| data | - | 1 bit | Arbitrating |
| data | - | 1 bit | AP0 Alive |
| data | - | 1 bit | AP1 Alive |
| data | - | 1 bit | AP2 Alive |
| data | - | 1 bit | AP3 Alive (External) |
| data | - | 1 bit | AP0 Ready |
| data | - | 1 bit | AP1 Ready |
| data | - | 1 bit | AP2 Ready |
| data | - | 1 bit | AP3 Ready (External) |
| data (CEX status) | - | 1 bit | System bit error (ID 7) |
| data (CEX status) | - | 1 bit | System power up bit error (ID 12) |
| data (CEX status) | - | 1 bit | PDI bit error (ID 9) |
| data (CEX status) | - | 1 bit | Memory Allocation bit (ID 8) |
| data (CEX status) | - | 1 bit | File system bit error (ID 6) |
| data (CEX status) | - | 1 bit | CAN A bit error (ID 73) |
| data (CEX status) | - | 1 bit | CAN B bit error (ID 74) |
| data (CEX status) | - | 1 bit | false |
| data (CEX status) | - | 1 bit | Arbiter enabled |
| data (CEX status) | - | 1 bit | Arbiter status |
- Message 2 (One for each Veronte Autopilot 1x): Sent when "Send score" is enabled
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_arbitration) | 0 | 1 | Arbitration message |
| data | - | 1 | Autopilot ID [0, 3] |
| data | - | 4 (32 bits) | Autopilot score as Float |
Command PWMs
Each PWM in CEX has to be associated to a Sub Id that indicates which of the CAN Bus message's PWM is listening to.
That allows to control up to four PWMs using the same message if that is desired. Each message is composed by 4 PWMs maximum.
- PWMs from 0 to 3 are sent in a message that includes 4 PWMs coded as 12-bit integers:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_pwm_0_3_set) | 2 | 1 | PWMs 0 to 3 |
| data (pwm0) | - | 12 bits | PWM value for sub-id 0 |
| data (pwm1) | - | 12 bits | PWM value for sub-id 1 |
| data (pwm2) | - | 12 bits | PWM value for sub-id 2 |
| data (pwm3) | - | 12 bits | PWM value for sub-id 3 |
- PWMs from 4 to 7 are sent in a message that includes 4 PWMs coded as 12-bit integers:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_pwm_12_15_set) | 3 | 1 | PWMs 4 to 7 |
| data (pwm0) | - | 12 bits | PWM value for sub-id 4 |
| data (pwm1) | - | 12 bits | PWM value for sub-id 5 |
| data (pwm2) | - | 12 bits | PWM value for sub-id 6 |
| data (pwm3) | - | 12 bits | PWM value for sub-id 7 |
- PWMs from 8 to 11 are sent in a message that includes 4 PWMs coded as 12-bit integers:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_pwm_8_11_set) | 11 | 1 | PWMs 8 to 11 |
| data (pwm0) | - | 12 bits | PWM value for sub-id 8 |
| data (pwm1) | - | 12 bits | PWM value for sub-id 9 |
| data (pwm2) | - | 12 bits | PWM value for sub-id 10 |
| data (pwm3) | - | 12 bits | PWM value for sub-id 11 |
- PWMs from 12 to 15 are sent in a message that includes 4 PWMs coded as 12-bit integers:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_pwm_12_15_set) | 12 | 1 | PWMs 12 to 15 |
| data (pwm0) | - | 12 bits | PWM value for sub-id 12 |
| data (pwm1) | - | 12 bits | PWM value for sub-id 13 |
| data (pwm2) | - | 12 bits | PWM value for sub-id 14 |
| data (pwm3) | - | 12 bits | PWM value for sub-id 15 |
- PWMs from 16 to 19 are sent in a message that includes 4 PWMs coded as 12-bit integers:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_pwm_16_19_set) | 13 | 1 | PWMs 16 to 19 |
| data (pwm0) | - | 12 bits | PWM value for sub-id 16 |
| data (pwm1) | - | 12 bits | PWM value for sub-id 17 |
| data (pwm2) | - | 12 bits | PWM value for sub-id 18 |
| data (pwm3) | - | 12 bits | PWM value for sub-id 19 |
A complete example of how to command PWMs from Veronte Autopilot 1x and read them into CEX can be consulted in the Commanding/Reading PWMs - Integration examples section of the CEX PDI Builder user manual.
Lift MCU telemetry
CEX to 1x
The telemetry sent by CEX via CAN Bus is composed by:
- Message 1:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_mcu_tm1) | 18 | 1 | Lift MCU telemetry data 1 |
| data | - | 1 | Battery Serial Number [0] |
| data | - | 1 | Battery Serial Number [1] |
| data | - | 1 | Battery Temperature (as received from MCU) |
| data | - | 1 | Low Cell Voltage (as received from MCU) |
| - | 4 bits | Reserved (Zeros) | |
| data (Status Bit) | - | 1 bit | PWM receiving Ok |
| data (Status Bit) | - | 1 bit | CAN PWM receiving Ok |
| data (Status Bit) | - | 1 bit | CAN B receiving |
| data (Status Bit) | - | 1 bit | CAN A receiving |
- Message 2:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_mcu_tm2) | 19 | 1 | Lift MCU telemetry data 2 |
| data | - | 1 | Battery Serial Number [2] |
| data | - | 1 | Battery Serial Number [3] |
| data | - | 1 | Battery Serial Number [4] |
| data | - | 1 | Battery Serial Number [5] |
| data | - | 1 | Battery Serial Number [6] |
| data | - | 1 | Battery Serial Number [7] |
1x to CEX
The telemetry sent from 1x to CEX must be configured as follows:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_mcu_cmd) | 10 | 1 | Lift MCU battery command |
| data | - | 1 | SUB-id A |
| data | - | 1 | LED Value A |
| data | - | 1 | SUB-id B |
| data | - | 1 | LED Value B |
| data | - | 1 | SUB-id C |
| data | - | 1 | LED Value C |
Each CEX will use the SUB-id of the PWM associated to the "Scorpion Tribunus"/PWM ID to identify the value to be used.
Scorpion Tribunus ESC Telemetry (Lift)
The telemetry read from the Scorpion ESC is sent as:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_esc_tm) | 5 | 1 | Scorpion Tribunus ESC telemetry data |
| data | - | 1 | Input voltage in range [0, 85] |
| data | - | 1 | Temperature in Celsius |
| data | - | 1 | Error Flags from the ESC |
| data | - | 1 | Current in Amps [0, 255] |
| data | - | 1 | Consumption in mAmps [0, 25500] |
| data | - | 1 | RPMs [0, 25500] |
| data | - | 1 | Throttle as percentage*2 [0, 200] |
JetiTM ESC Telemetry
The telemetry read from Jeti-TM compatible ESCs is sent as:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_esc_tm2) | 6 | 1 | Jeti ESC telemetry data |
| data | - | 1 | Throttle value [0, 200] |
| data | - | 2 | Current RPMs |
| data | - | 10 bits | Input voltage in the range [0, 70] Volts |
| data | - | 10 bits | Temperature in the range [0, 575] Kelvin |
| data | - | 12 bits | Current in the range [0, 400.0] Amps |
Jeti BEC Telemetry
The telemetry read from a BEC will be sent in 2 different messages:
- Message 1:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_bec_tm1) | 7 | 1 | Jeti BEC telemetry data 1 |
| data | - | 2 | Device ID |
| data | - | 12 bits | Input voltage in the range [0, 70] Volts |
| data | - | 12 bits | Output voltage in the range [0, 70] Volts |
| data | - | 12 bits | Temperature in the range [0, 575] Kelvin |
- Message 2:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_bec_tm2) | 8 | 1 | Jeti BEC telemetry data 2 |
| data | - | 2 | Device ID |
| data | - | 12 bits | Current in the range [0, 100.0] Amps |
Jeti Temperature Sensor Telemetry
The telemetry read from a Temperature sensor will be sent as:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_bec_tm) | 9 | 1 | Jeti BEC telemetry data 2 |
| data | - | 2 | Device ID |
| data | - | 12 bits | Measured temperature 1 in the range [0, 750] Kelvin |
| data | - | 12 bits | Measured temperature 2 in the range [0, 750] Kelvin |
Set Maintenance Mode Command
This command will configure the CEX in maintence mode, setting its configuration in a way that communications can work through SCI-A, SCI-B or Serial-to-CAN configured as:
- SCI-A and SCI-B: 115200 bauds, 8 data bits, 1 stop, no parity.
- Serial to CAN:
- TX Id: 1301
- RX Id: 1301
The format of the command is:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_cmd_maint) | 16 | 1 | Command to go to Maintenance Mode |
Stick Selection Command
This command is used to enable or disable the CEX PPM reader. If the address received matches the CEX's one, CEX PPM reader will be enabled, otherwise it will be disabled.
The format of the command is:
| Type | Value | Bytes | Description |
|---|---|---|---|
| cmd (t_stick_sel) | 17 | 1 | Command for Stick selection |
| data (sysaddr) | - | 1 | address 0 |
| data (sysaddr) | - | 1 | address 1 |
© 2026 Embention. All rights reserved.